package com.shop.cereshop.app.dao.product;

import com.shop.cereshop.app.page.cart.CartSku;
import com.shop.cereshop.app.page.product.*;
import com.shop.cereshop.app.param.groupwork.GroupWorkSettlementParam;
import com.shop.cereshop.app.param.settlement.ProductSku;
import com.shop.cereshop.commons.domain.product.CereProductSku;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CereProductSkuDAO {
    int deleteByPrimaryKey(Long skuId);

    int insert(CereProductSku record);

    int insertSelective(CereProductSku record);

    CereProductSku selectByPrimaryKey(Long skuId);

    int updateByPrimaryKeySelective(CereProductSku record);

    int updateByPrimaryKey(CereProductSku record);

    List<SkuName> findSkuNames(@Param("productId") Long productId);

    List<SkuValue> findSkuValues(@Param("skuName") String skuName, @Param("productId") Long productId);

    ProductSkus findSku(@Param("skuId") Long skuId);

    ProductSkus findFirstSku(@Param("productId") Long productId);

    List<Sku> findSkuByProductId(@Param("productId") Long productId);

    String findValueBySkuId(@Param("skuId") Long skuId);

    Integer findStockNumberBySkuId(@Param("skuId") Long skuId);

    List<CartSku> findStockNumberBySkus(@Param("skus") List<ProductSku> skus);

    void updateBatch(@Param("list") List<CartSku> list);

    List<CartSku> findSkuBySkus(@Param("skus") List<ProductSku> skus);

    List<CartSku> findSkuByOrderId(@Param("orderId") Long orderId);

    List<CartSku> findSkuByIds(@Param("ids") List<Long> ids, @Param("orderId") Long orderId);

    List<CereProductSku> findStockNumberByOrderId(@Param("orderId") Long orderId);

    List<CereProductSku> findAll();

    List<SkuValue> findOneValues(@Param("skuId") Long skuId);

    Integer findStockNumber(@Param("skuId") Long skuId);

    List<Sku> findGroupWorkSkuByProductId(@Param("productId") Long productId, @Param("shopGroupWorkId") Long shopGroupWorkId);

    List<CartSku> findSkuBySkuId(@Param("skuId") Long skuId);

    List<Sku> findSeckillSkuByProductId(@Param("productId") Long productId, @Param("shopSeckillId") Long shopSeckillId);

    List<Sku> findDiscountSkuByProductId(@Param("productId") Long productId, @Param("shopDiscountId") Long shopDiscountId);

    List<CartSku> findSkuBySkuIdAndWorkId(GroupWorkSettlementParam param);

    List<SkuValue> findValuesByProductId(@Param("productId") Long productId);

    List<CartSku> findOriginalSkuBySkus(@Param("skus") List<ProductSku> skus);

    List<CartSku> findGroupWorkStockNumberBySkus(@Param("skus") List<ProductSku> skus, @Param("shopGroupWorkId") Long shopGroupWorkId);

    List<CartSku> findSeckillStockNumberBySkus(@Param("skus") List<ProductSku> skus, @Param("shopSeckillId") Long shopSeckillId);

    List<CartSku> findDiscountStockNumberBySkus(@Param("skus") List<ProductSku> skus, @Param("shopDiscountId") Long shopDiscountId);

    void updateBatchSkus(@Param("list") List<CereProductSku> list);

    SkuTool findTool(@Param("productId") Long productId);

    CereProductSku selectByproductId(Long productId);
}